//package com.yulian.web_api.common;
//
//import java.util.Set;
//
//import com.yulian.common.CommonToEventBus;
//import com.yulian.repository.CommonRepositoryImpl;
//
//import io.netty.util.internal.logging.InternalLogger;
//import io.netty.util.internal.logging.Log4JLoggerFactory;
//import io.vertx.core.Future;
//import io.vertx.core.Promise;
//import io.vertx.core.Vertx;
//import io.vertx.core.eventbus.EventBus;
//import io.vertx.core.json.JsonObject;
//import io.vertx.ext.auth.User;
//import io.vertx.ext.web.FileUpload;
//import io.vertx.pgclient.PgPool;
//import io.vertx.sqlclient.SqlConnection;
///**
// *
// * @author yudayong
// *
// */
//public class BatchImport {
//	final InternalLogger logger = Log4JLoggerFactory.getInstance(BatchImport.class);
//	CommonRepositoryImpl commonRepository = new CommonRepositoryImpl();
//	/**
//	 * 获取数据库链接
//	 * @param client
//	 * @return
//	 */
//	public Future<SqlConnection> getCon(PgPool client){
//		Promise<SqlConnection> promise = Promise.promise();
//		// Get a connection from the pool
//		client.getConnection(ar1 -> {
//			if (ar1.succeeded()) {
//				//Obtain our connection
//				SqlConnection conn = ar1.result();
//				promise.complete(conn);
//			} else {
//				//Vert.x帮我们捕获异常后，我们只需要做接下来的处理即可，比如写日志
//				logger.info("连接数据库错误信息: "+ar1.cause().toString());
//		        promise.fail(ar1.cause());  //这里就相当于继续向上抛出异常，用Promise来向上抛异常
//			}
//		});
//		return promise.future();
//	}
//
//	/**
//     *  在这个 event-loop-verticle 里面对上传文件重新命名 ，当excel里面数据太多的时候，需要让另一个 workVerticle 来处理
//     * @param vertx
//     * @param eventBus
//     * @param client
//     * @param config
//     * @param files
//     * @param user
//     * @return
//     */
//	public Future<JsonObject> handleUploadExcelFile(Vertx vertx, EventBus eventBus, PgPool pool, JsonObject config, Set<FileUpload> files, String source_from,  User user) {
//		Promise<JsonObject> promise = Promise.promise();
//  		JsonObject responseJSObj = new JsonObject();
//  		if(files.size() == 0) {
//  			responseJSObj.put("code", -1).put("msg", "上传文件错误,数量为0");
//  			promise.complete(responseJSObj);
//  		}else {
//  			//设一次只能上传一个excel文件
//  	    	for(FileUpload f: files) {
//  				String uploadedFileName =  f.uploadedFileName();
//  				logger.info("in file handler, uploadedFileName: {} ", f.uploadedFileName());
//
//  				//获取文件扩展名
//  				String file_ext = f.fileName().substring(f.fileName().lastIndexOf("."), f.fileName().length());
//  				String file_name = "webroot/upload/test" +  file_ext;
//  				logger.info("in file handle, file_name: {} ", file_name);
//  				//先异步删除已经存在的文件，然后再把新上传的文件移动到指定路径下
//  				vertx.fileSystem().delete(file_name,res0->{
//  					vertx.fileSystem().move(uploadedFileName, file_name, res->{
//  						if(res.succeeded()) {
//  							/**
//  							 * 方法1，发送消息到事件总线，由worker verticle进行处理
//  							 */
////  							JsonObject data = new JsonObject();
////  							data.put("file_name", file_name).put("source_from", source_from);
////  							//使用传送事件到event_bus到通用sendMessageToEventBus, 需要有地址，数据data；
////  							CommonToEventBus commonToEventBus = new CommonToEventBus();
////  							String address_handle_excel = "handle_upload_excel"; //config.getString("EVENT_BUS_KEY_PREFIX") +"."+config.getString("KEY_HANDLE_EXCEL");
////  							commonToEventBus.sendMessageToEventBus(eventBus, address_handle_excel,  data)
////  							.onComplete( ar2->{
////  								if (ar2.succeeded()) {
////  									responseJSObj.put("msg", ar2.result().toString());
////  									promise.complete(responseJSObj);
////  								} else {
////  									ar2.cause().printStackTrace();
////  									responseJSObj.put("code", -1);
////  									responseJSObj.put("msg", responseJSObj.getString("msg")+"; 发送处理excel文件消息时发生错误"+ar2.cause().getMessage());
////  									promise.complete(responseJSObj);
////  								}
////  							});
//  							/**
//  							 * 方法2，直接调用服务类进行处理
//  							 */
//
//  							switch(source_from) {
//  							case "supplier_info":
//  								HandleBatchSupplierInfo handleBatchSupplierInfo = new HandleBatchSupplierInfo();
//  								handleBatchSupplierInfo.handleExcelFile(vertx, pool, config, file_name)
//  								.onSuccess(result -> {
//  									logger.info("批量导入供应商信息成功");
//  									responseJSObj.put("msg", result.getString("msg"));
//  									promise.complete(responseJSObj);
//  								})
//  								.onFailure(err ->{
//  									logger.info("批量导入供应商信息失败");
//  									promise.complete(responseJSObj);
//  								});
//
//  								break;
//  							case "goods_parameter":
//  								HandleBatchGoodsParameter HandleBatchGoodsParameter = new HandleBatchGoodsParameter();
//  								HandleBatchGoodsParameter.handleExcelFile(vertx, pool, config, file_name)
//  								.onSuccess(result -> {
//  									logger.info("批量导入商品参数信息成功");
//  									responseJSObj.put("msg", result);
//  									promise.complete(responseJSObj);
//  								})
//  								.onFailure(err ->{
//  									//JsonObject responseJSObj = new JsonObject();
//  									logger.info("批量导入商品参数信息失败");
//  								});
//  								break;
//  							case "goods_package":
//  								HandleBatchGoodsPackage handleBatchGoodsPackage = new HandleBatchGoodsPackage();
//  								handleBatchGoodsPackage.handleExcelFile(vertx, pool, config, file_name)
//  								.onSuccess(result -> {
//  									logger.info("批量导入商品参数信息成功");
//  									responseJSObj.put("msg", result);
//  									promise.complete(responseJSObj);
//  								})
//  								.onFailure(err ->{
//  									//JsonObject responseJSObj = new JsonObject();
//  									logger.info("批量导入商品参数信息失败");
//  								});
//  								break;
//  							case "gather_area_goods_cost":
//  								HandleBatchGatherAreaGoodsCost handleBatchGatherAreaGoodsCost = new HandleBatchGatherAreaGoodsCost();
//  								handleBatchGatherAreaGoodsCost.handleExcelFile(vertx, pool, config, file_name)
//  								.onSuccess(result -> {
//  									logger.info("批量导入商品参数信息成功");
//  									responseJSObj.put("msg", result);
//  									promise.complete(responseJSObj);
//  								})
//  								.onFailure(err ->{
//  									//JsonObject responseJSObj = new JsonObject();
//  									logger.info("批量导入商品参数信息失败");
//  								});
//  								break;
//  							case "supplier_goods_cost":
//  								HandleBatchSupplierGoodsCost handleBatchSupplierGoodsCost = new HandleBatchSupplierGoodsCost();
//  								handleBatchSupplierGoodsCost.handleExcelFile(vertx, pool, config, file_name)
//  								.onSuccess(result -> {
//  									logger.info("批量导入商品参数信息成功");
//  									responseJSObj.put("msg", result);
//  									promise.complete(responseJSObj);
//  								})
//  								.onFailure(err ->{
//  									//JsonObject responseJSObj = new JsonObject();
//  									logger.info("批量导入商品参数信息失败");
//  								});
//  								break;
//  							}
//
//  						}else {
//  							responseJSObj.put("msg", "上传文件失败,原因:"+res.cause().getMessage());
//  		    				promise.complete(responseJSObj);
//  						}
//  					});
//  				});
//  			}
//  		}
//		return promise.future();
//	}
//
//}
//
